# Create your views here.
from django.http import HttpResponse, HttpResponseRedirect
from django.template import RequestContext
# Para acortar el manejo de templates
# return render_to_response('current_datetime.html', {'current_date': now})
# Si quiero poner disponible todas las variables de la funcion
# return render_to_response('current_datetime.html', locals())

from django.shortcuts import render_to_response
# Para internacionalizacion _("Hola")
#_('Today is %(month)s, %(day)s.') % {'month': m, 'day': d}
# En templates
#<title>{% trans "This is the title." %}</title>
#<title>{% trans myvar %}</title>
from django.utils.translation import ugettext as _

# from ebombeo.libs.hidrogeo.funcpozo import *
# from ebombeo.libs.hidrogeo.pozonoperm import *
from igs.libs.matplotwrapper import *
from igs.libs.hydrogeo.intensbombeocc import IntEnsBombeoCC

from forms import *
# formulario de register!
from django.contrib.auth.forms import UserCreationForm
from archivocsv import *

from django.contrib.auth.decorators import login_required


class DatosInter():
  pass

def index(request):
  mensaje = r"Bienvenido a INGESUR SRL. Aqui usted puede utilizar las herramientas que se encuentran en el menu."
  return render_to_response('wt/index.html', {'mensaje': mensaje}, context_instance=RequestContext(request))

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/accounts/regsuccess")
    else:
        form = UserCreationForm()
    return render_to_response("registration/register.html", {
        'form': form,
    })

def uploadCSV(request):

  global datos
  global iebcc
  # Estoy haciendo submit?

  if request.method == 'POST':
    form = UploadCSVForm(request.POST, request.FILES) # La tomo con los datos submiteados    
    if form.is_valid():
      tieneheader = form.cleaned_data['tieneheader']
      sepcampo = form.cleaned_data['sepcampo'] 
      # Solo si son chicos
      # Para algo mas grande
      # handle_uploaded_file(request.FILES['filename'])
      # filename = form.cleaned_data['filename']
      csvstr = request.FILES['filename'].read()
      # Variable global para guardar datos necesarios      
      dd = ArchivoCSV(csvstr, sepcampo, tieneheader)
      t = dd.getTiempo()
      s = dd.getDescenso()
      # d = [ t , s]
      temp = []
      for i in range(0, len(t)):
        t[i] = t[i]/( 60.0*24 )
        temp.append( { 't': t[i], 's': s[i] } ) 
      # Estructura de datos compartida             
      datos = DatosInter()      
      # Esta definida?
      try:
        iebcc
      except NameError:
        iebcc = None
      # No esta ... la genero
      if iebcc is None:
        iebcc = IntEnsBombeoCC()      
      datos.filename = request.FILES['filename']
      datos.data = temp
      # d = temp
      # Genero png      
      mp = MatplotWrapper(t,s,'/home/geus/igs/media/tmp/')
      png = mp.createImageAll()
      # respuesta = 'Los datos %s,%s,%s' % (tieneheader, sepcampo, csvdata)
      return render_to_response('wt/parametros.html', {'datos': datos, 'archivoPNG': png}, context_instance=RequestContext(request))
      #return HttpResponseRedirect('/thanks/') # Redirect after POST
  form = UploadCSVForm()
  titulo = _(r"Titulo->Subida de archivo CSV")
  mensaje = _(r"Mensaje->En este caso es necesario cargar los datos de ....")
  ayuda = _(r"Ayuda->El archivo debe contener dos columnas")   
  return render_to_response('wt/subir.html', {'form': form, 
              'titulo': titulo, 'mensaje': mensaje, 'ayuda': ayuda}, context_instance=RequestContext(request))

#def handle_uploaded_file(f):
#    destination = open('/tmp/prueba.csv', 'wb+')
#    for chunk in f.chunks():
#        destination.write(chunk)
#    destination.close()


#def index2(request):
#  u = 0.1
#  a = 3
#  h = FuncPozo()
#  np = PozoNoPerm()
#  # 30 minutos
#  r = 10
#  t = []
#  for cont in range(1, 300):
#    t.append( cont/(60.0*24.0) )    
#  # Q = 3 m3/h
#  Q = 3*24.0
#  T = 100.0
#  S = 0.001  
#  ACdesc = np.descAC(r, t, Q, T, S)
#  c = h.Wu(u)
#  sc = h.Wua(u, a)
#  respuesta = "(u,Wu) = (%f,%f) <br> (u,a,Wua) = (%f,%f,%f) <br>" % (u, c[0], u, a, sc[0])
#  respuesta = respuesta + "AC(r,Q,T,S) = (%f,%f,%f,%f) <br>" % (r, Q, T, S) 
#  respuesta = respuesta + "<table><tr><th>Id</th><th>t</th><th>s</th></tr>"
#  for cont in range(0, len(t)):
#    respuesta = respuesta + "<tr><td>%d</td><td>%f</td><td>%.8f</td></tr>" % (cont, t[cont], ACdesc[cont])
#  respuesta = respuesta + "</table>"
#  return HttpResponse( respuesta )
#  #return render_to_response('polls/detail.html', {'poll': p})

def datosAdAcC(request):
  # Estoy haciendo submit?
  # Tendria que revisar primero si hay cosas en datos
  # Si no hay nada me voy y chau
  # Lo voy a modificar
  global datos 
  if datos:
    if request.method == 'POST':
      form = EBCCAcCForm(request.POST) # La tomo con los datos submiteados    
      if form.is_valid():
        datos.tipoacuifero = form.cleaned_data['tipoacuifero']
        datos.caudal = form.cleaned_data['caudal']
        datos.distancia = form.cleaned_data['distancia']      
        # Interpretarlo
        # from ebombeo.libs.hidrogeo.intensbombeocc import IntEnsBombeoCC
        t = []
        s = []
        for c in range(0, len(datos.data)):
          t.append( datos.data[c]['t'] )
          s.append( datos.data[c]['s'] )
        # TODO: Hacerlo afuera por la Wua
        # iebcc = IntEnsBombeoCC( datos.tipoacuifero , datos.caudal , datos.distancia , t ,  s )
        # TODO: 
        iebcc.setTipoAc(datos.tipoacuifero)
        iebcc.setCaudal(datos.caudal)
        iebcc.setDistancia(datos.distancia)
        iebcc.setData(t,s)
        iebcc.calcParametros()        
        datos.trans = iebcc.trans
        datos.almac = iebcc.almac
        datos.sCalc = iebcc.sCalc
        datos.stralmac = "%.2E" % datos.almac
        sCalc = iebcc.sCalc
        cont = 0
        for d in datos.data:
          d['sCalc'] = sCalc[cont]
          d['deltaS'] = d['s'] - d['sCalc']
          d['deltaSC'] = d['deltaS']*d['deltaS']
          cont = cont + 1        
        misdatos = datos
        # obtener grafico de interpretacion
        mp = MatplotWrapper(t,s,'/home/geus/ebombeo/media/tmp/')        
        png = mp.createImageAd(t, datos.sCalc)
        return render_to_response('wt/resultados.html', {'datos': misdatos, 'archivoPNG': png}, context_instance=RequestContext(request))
      else:
        # La form no es valida
        mensaje = "La form no es valida"
        return render_to_response('wt/index.html', {'mensaje': mensaje}) 
    form = EBCCAcCForm( initial = { 'tipoacuifero': 'C' } )
    titulo = _(r"Titulo->Acuifero confinado")
    mensaje = _(r"Mensaje->En este caso es necesario cargar los datos de ....")
    ayuda = _(r"Ayuda->datos adicionles de ayuda")
    mio = datos
    # Este template es plano, solo tabs con ajax
    return render_to_response('wt/datosadicionales.html', {'forma' : "/interpretar/daac/",'form': form, 
                'titulo': titulo, 'mensaje': mensaje, 'ayuda': ayuda,  'datos': mio}, context_instance=RequestContext(request))
  else:
    mensaje = "Error"
    return render_to_response('wt/index.html', {'mensaje': mensaje}, context_instance=RequestContext(request))    

def datosAdAcSC(request):
  # Estoy haciendo submit?  
  global datos
  global iebcc
  if request.method == 'POST':
    form = EBCCAcCForm(request.POST) # La tomo con los datos submiteados    
    if form.is_valid():
      datos.tipoacuifero = form.cleaned_data['tipoacuifero']
      datos.caudal = form.cleaned_data['caudal']
      datos.distancia = form.cleaned_data['distancia'] 
      # Interpretarlo
      # from ebombeo.libs.hidrogeo.intensbombeocc import IntEnsBombeoCC
      t = []
      s = []
      for c in range(0, len(datos.data)):
        t.append( datos.data[c]['t'] )
        s.append( datos.data[c]['s'] )
      # iebcc = IntEnsBombeoCC( datos.tipoacuifero , datos.caudal , datos.distancia , t ,  s )
      iebcc.setTipoAc(datos.tipoacuifero)
      iebcc.setCaudal(datos.caudal)
      iebcc.setDistancia(datos.distancia)
      iebcc.setData(t,s)      
      iebcc.calcParametros()        
      datos.trans = iebcc.trans
      datos.almac = iebcc.almac
      datos.sCalc = iebcc.sCalc
      datos.stralmac = "%.2E" % datos.almac
      datos.rdB = iebcc.selrdB
      sCalc = iebcc.sCalc
      cont = 0
      for d in datos.data:
        d['sCalc'] = sCalc[cont]
        d['deltaS'] = d['s'] - d['sCalc']
        d['deltaSC'] = d['deltaS']*d['deltaS']
        cont = cont + 1        
      misdatos = datos
      # obtener grafico de interpretacion
      mp = MatplotWrapper(t,s,'/home/geus/ebombeo/media/tmp/')        
      png = mp.createImageAd(t, datos.sCalc)
      return render_to_response('wt/resultados.html', {'datos': misdatos, 'archivoPNG': png}, context_instance=RequestContext(request))
  form = EBCCAcCForm( initial = { 'tipoacuifero': 'SC' } )
  titulo = _(r"Titulo->Acuifero confinado")
  mensaje = _(r"Mensaje->En este caso es necesario cargar los datos de ....")
  ayuda = _(r"Ayuda->datos adicionles de ayuda")
  # Este template es plano, solo tabs con ajax
  return render_to_response('wt/datosadicionales.html', {'forma' : "/interpretar/daasc/",'form': form, 
              'titulo': titulo, 'mensaje': mensaje, 'ayuda': ayuda, 'datos': datos}, context_instance=RequestContext(request))              
              
def datosAdAcL(request):
  # Estoy haciendo submit?
  global datos
  if request.method == 'POST':
    form = EBCCAcLForm(request.POST) # La tomo con los datos submiteados    
    if form.is_valid():
      datos.tipoacuifero = form.cleaned_data['tipoacuifero']
      datos.caudal = form.cleaned_data['caudal']
      datos.distancia = form.cleaned_data['distancia'] 
      datos.espsat = form.cleaned_data['espsat'] 
      from ebombeo.libs.hydrogeo.intensbombeocc import IntEnsBombeoCC
      t = []
      s = []
      for c in range(0, len(datos.data)):
        t.append( datos.data[c]['t'] )
        s.append( datos.data[c]['s'] )
      iebcc = IntEnsBombeoCC( datos.tipoacuifero , datos.caudal , datos.distancia , t ,  s, h0 = datos.espsat )
      iebcc.calcParametros()        
      datos.trans = iebcc.trans
      datos.almac = iebcc.almac
      sCalc = iebcc.sCalc
      cont = 0
      for d in datos.data:
        d['sCalc'] = sCalc[cont]
        d['deltaS'] = d['s'] - d['sCalc']
        d['deltaSC'] = d['deltaS']*d['deltaS']
        cont = cont + 1      
      # datos.ssCalc = iebcc.ssCalc
      # datos.ttCalc = iebcc.ttCalc
      datos.stralmac = "%.2E" % datos.almac
      misdatos = datos
      # obtener grafico de interpretacion
      mp = MatplotWrapper(t,s)        
      png = mp.createImageAd(iebcc.ttCalc, iebcc.ssCalc)      
      misdatos = datos     
      return render_to_response('wt/resultados.html', {'datos': misdatos, 'archivoPNG': png}, context_instance=RequestContext(request))
  form = EBCCAcLForm( initial = { 'tipoacuifero': 'L' } )
  titulo = _(r"Titulo->Acuifero libre")
  mensaje = _(r"Mensaje->En este caso es necesario cargar los datos de ....")
  ayuda = _(r"Ayuda->datos adicionles de ayuda")
  # Este template es plano, solo tabs con ajax
  return render_to_response('wt/datosadacc.html', {'forma' : "/interpretar/daal/",'form': form, 
              'titulo': titulo, 'mensaje': mensaje, 'ayuda': ayuda}, context_instance=RequestContext(request))              
